package file.it.d2_recursion;

import java.io.File;
import java.io.IOException;

/**
 * 目标：掌握文件搜索的实现
 */
public class Test5 {
    public static void main(String[] args) throws IOException {
        searchFile(new File("D:/"), "Postman-win64-Setup.exe");
    }

    /**
     * 去目录下搜索某个文件
     * @param dir 目录
     * @param fileName 要搜索的文件名
     */
    public static void searchFile(File dir, String fileName) throws IOException {
        // 1.把非法的情况都拦截
        if (dir == null || !dir.exists() || dir.isFile()) {
            return; // 代表无法搜索
        }

        // 2.dir不是null,存在，一定是目录对象
        // 获取当前目录下的全部一级文件对象
        File[] files = dir.listFiles();

        // 3.判断当前目录下是否存在一级文件对象,以及是否可以拿到一级文件对象
        if (files != null && files.length > 0) {
            // 4.遍历全部一级文件对象
            for (File f : files) {
                // 5.判断是文件，还是文件夹
                if (f.isFile()) {
                    // 是文件，判断这个文件名是否是我们要找到
                    if (f.getName().contains(fileName)) {
                        System.out.println("找到了：" + f.getAbsolutePath());
                        //运行该程序
                        Runtime runtime = Runtime.getRuntime();
                        runtime.exec(f.getAbsolutePath());
                    }
                } else {
                    // 是文件夹，继续重复这个过程
                    searchFile(f, fileName);
                }
            }
        }
    }
}
